#ifndef __TYPES_H__
#define __TYPES_H__

#include <cstdint>
#include <memory>
#include <vector>

namespace Hope {

	using std::uint16_t;
	using std::uint32_t;
	using std::uint64_t;
	using std::int16_t;
	using std::int32_t;
	using std::int64_t;
    
    class Mesh;
    typedef std::shared_ptr<Mesh> MeshPtr;
    typedef std::vector<MeshPtr> MeshPtrVec;

    class SceneNode;
    typedef std::shared_ptr<SceneNode> SceneNodePtr;

    class OGLShaderObject;
    typedef std::shared_ptr<OGLShaderObject> OGLShaderObjectPtr;

    class SceneManager;
    typedef std::shared_ptr<SceneManager> SceneManagerPtr;

    class Texture;
    typedef std::shared_ptr<Texture> TexturePtr;

    class OGLRender;
    typedef std::shared_ptr<OGLRender> OGLRenderPtr;

    class OGLRenderBuffer;
    typedef std::shared_ptr<OGLRenderBuffer> OGLRenderBufferPtr;
    typedef std::vector<OGLRenderBufferPtr> OGLRenderBufferPtrVec;
    typedef std::pair<OGLRenderBufferPtrVec, OGLRenderBufferPtrVec> OGLRenderBuffers;

	enum Intersection
	{
		OUTSIDE,
		INTERSECTS,
		INSIDE
	};

#undef M_PI
    static const float M_PI = 3.14159265358979323846264338327950288f;
    static const float M_DEGTORAD = M_PI / 180.f;

#define GLOG_NO_ABBREVIATED_SEVERITIES
#define GOOGLE_GLOG_DLL_DECL
}

#endif